#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0

typedef int DataType;
typedef int Status;

typedef struct LNode
{
    DataType data;
    struct LNode *next;
} LNode, *LinkList;

Status InitList(LinkList *L);
void DestroyList(LinkList *L);
void ClearList(LinkList L);
Status isEmpty(LinkList L);
int GetLength(LinkList L);
Status GetElem(LinkList L, int i, DataType *e);
Status compare(DataType e1, DataType e2);
Status FindData(LinkList L, DataType elem, Status (*compare)(DataType e1, DataType e2));
Status PreElem(LinkList L, DataType cur_e, DataType *pre_e);
Status NextElem(LinkList L, DataType cur_e, DataType *next_e);
Status InsertElem(LinkList L, int i, DataType e);
Status DeleteElem(LinkList L, int i, DataType *elem);
void Visit(DataType elem);
void TraverseList(LinkList L, void (*Visit)(DataType));